;------------------------------------------------- ; Z80 Nuova Elettronica ; Disassemblatore residente in ROM/RAM ; ; uso: caricare in RAM a 5000h e lanciare allo stesso indirizzo. ; Puō essere rilocato a patto di non spostare l'inizio della tabella mnemonici, che deve necessariamente iniziare ad una locazione ; avente il byte meno significativo uguale a 00 (xx00h) ; ; digitare separati da una virgola l'indirizzo esadecimale di inizio e fine codice da disassemblare (iiii,ffff). ; per confermare l'immissione: ; Invio, la lista degli mnemonici verrā  mostrata a video ; Spazio, la lista degli mnemonici verrā  mostrata a video e stampata tramite la porta I/O 0x03 ; Control-S mette in pausa lo scorrimento del codice disassemblato. Un tasto qualsiasi per riprendere ; Control-L (Form Feed) cancella lo schermo ; Break riavvia il disassemblatore ; ; sorgente compilato e commentato da Paolo Carrer sulla base di un'immagine ROM compresa nell'espansione di terze parti "Monitor AG3" ; ; il contenuto completo della ROM originale "Monitor AG3" č costituito per il primo kilobyte dal monitor 390 Nuova Elettronica allocato da F000h a F3FFh ; la cui stringa "MONITOR V1.0" č modificata in "MONITOR AG 3". Non sono presenti altre modifiche (quindi nessun comando aggiuntivo) ; Il restante contenuto della ROM originale, da F400h in poi per un totale di circa 2,5 Kb, č quello a cui si riferisce il presente codice sorgente. ; In origine, in coda alla ROM, era presente una piccola routine di copia dall'indiriizzo F400h a 5000h, locazione di destinazione del presente codice. ; tale routine era plausibilmente richiamata dal monitor tramite il comando Goto (Gnnnn), nel presente codice sorgente č stata rimossa ; ; novembre 2024 ; ; compilare con ZASM ;------------------------------------------------- PUNT: equ 0014h ; + 0015h locazione video attuale LIST: equ 0016h ; se = 0 scrive a video, se != 0 scrive a video e stampa IX_IY: equ 0017h ; annotazione per decodifica opcodes con HL, IX o IY RAMVID: equ 0EC00h VSYNC: equ 0EBh KEYBRD: equ 0EAh LPT: equ 003h CR: EQU 0DH LF: EQU 0AH FF: EQU 0CH BS: EQU 08H SPACE: EQU ' ' CURS: EQU 081H ; carattere del cursore #target bin #code _BANKEPR_0,$5000,$0950 RESET: JP BEGIN ; scrive a video il carattere in C CO: NOP LD A,C CP 60H JR C,BIP SRA C ; il monitor 390 usa invece RES 5,C BIP: PUSH AF LD A,C EXX LD HL,(PUNT) CP SPACE JP M,OB11 ; se č un carattere ascii di controllo salta a loro gestione CALL CAROU INC HL ; scorrimento righe verso l'alto OAF2: LD A,H CP 0EEH ; verifica se fare scroll per fine schermo JR NZ,OB09 LD DE,RAMVID LD HL,RAMVID + 32 ; 32 caratteri per riga LD B,04H ; sposta i blocchi di RAM video L0007: PUSH BC LD BC,0078H L0006: IN A,(VSYNC) BIT 7,A JR NZ,L0006 LDIR POP BC DJNZ L0007 EX DE,HL CALL OB37 LD HL,RAMVID + 1E0h ; scrive il carattere semigrafico del cursore OB09: LD A,CURS CALL CAROU LD (PUNT),HL POP AF EXX RET ; gestione caratteri ascii di controllo OB11: CP CR JR NZ,OB1A CALL OB37 JR OAF2 ; cancella l'intero schermo OB1A: CP FF JR NZ,OB2E LD HL,RAMVID OB21: CALL OB37 LD A,H CP 0EEH JR NZ,OB21 LD HL,RAMVID JR OB09 ; cancella carattere a sinistra del cursore OB2E: CP BS JR NZ,OB09 LD A,SPACE CALL CAROU DEC HL JR OB09 ; cancella dal cursore a fine riga OB37: LD A,SPACE CALL CAROU INC HL LD A,L AND 1FH JR NZ,OB37 RET ; emissione del carattere CAROU: PUSH AF PUSH BC LD C,A L0013: IN A,(VSYNC) BIT 7,A JR NZ,L0013 LD (HL),C POP BC POP AF RET ; lettura tastiera con conversione da minuscole a maiuscole CI: IN A,(KEYBRD) BIT 7,A JP Z,CI RES 7,A CP 60H JP M,L0015 CP 7BH JP P,L0015 RES 5,A L0015: PUSH AF L0016: IN A,(KEYBRD) BIT 7,A JR NZ,L0016 POP AF RET ; fino a qui uguale alla 390 ; in seguito esistono altre routines uguali a quelle del monitor della eprom 390 SNDSPC: LD C,SPACE JP CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) SNDCR: LD C,CR JP CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) ; richiede un carattere all'utente (ritorno in A) e lo scrive sullo schermo TI: CALL CI ; legge tastiera AND 7FH ; superfluo? PUSH BC LD C,A CALL CO ; scrive a video il carattere digitato LD A,C POP BC RET ; ritorna con carattere tastiera in A ; converte un valore nella sua rappresentazione ASCII CONV: ADD A,90H DAA ADC A,40H DAA LD C,A RET ; converte il valore a 8 bit contenuto nell'accumulatore nella ; sua rappresentazione ASCII e lo scrive sullo schermo o stampante HXD: CALL CONV JP CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) ; converte il valore a 16 bit contenuto in HL nella sua ; rappresentazione ASCII e lo scrive sullo schermo LADR: LD A,H CALL LBYTE LD A,L ; converte i nibble del valore a 8 bit contenuto nell'accumulatore ; nella sua rappresentazione ASCII e li scrive sullo schermo LBYTE: PUSH AF RRCA RRCA RRCA RRCA AND 0FH CALL HXD POP AF AND 0FH JR HXD ; verifica che il numero digitato sia ; compreso in [0..9,A..F], se non lo e' ; ritorna C = 1 NIBBLE: SUB '0' RET C ; ritorna se carattere č inferiore allo "0" ADD A,'0'-'G' ; 0E9H RET C ; ritorna se carattere č superiore alla "F" ADD A,06H JP P,NI0 ; salta se il carattere č una lettera (da A a F) ADD A,07H RET C ; torna se il carattere č maggiore di "9" NI0: ADD A,0AH ; converte il carattere alfanumerico nel valore esadecimale OR A RET ; controlla il tipo di carattere immesso P2C: CP SPACE RET Z ; ritorna se "spazio" CP "," RET Z ; ritorna se "virgola" CP CR SCF CCF RET NZ ; se non č "invio" ritorna con carry azzerato SCF RET ; se č "invio" ritorna con flag carry impostato ; input dei parametri: C = numero dei parametri ; i parametri sono resi nello stack EXPR2: LD HL,0000H ; inizializza HL EX0: CALL TI ; input di un carattere, A = carattere LD B,A ; salva l'ultimo carattere digitato CALL NIBBLE ; e' un carattere esadecimale [0..9,A..F]? JR C,EX2 ; no, carattere speciale o altro ; ----------------------------------------- ; immagazzinamento parametro in HL con ; spostamento dei nibble a sinistra ad ogni ; carattere digitato e somma del carattere ; digitato al nibble meno significativo. ; HL puo' ricevere un valore a 8 o a 16 bit ; ; ---------------------- ; A -> 1 5 F 7 <- tasti premuti ; ---------------------- ADD HL,HL ; HL -> 0 2 2A 2BE ADD HL,HL ; HL -> 0 4 54 57C ADD HL,HL ; HL -> 0 8 A8 AF8 ADD HL,HL ; HL -> 0 10 150 15F0 ; ---------------------- OR L ; A = A + L ; ---------------------- LD L,A ; HL -> 1 15 15F 15F7 JR EX0 ; continua input ; STACK prima dello scambio ; -------------------------------------- ; | indirizzo di ritorno (da EXPR o EXF) ; -------------------------------------- ; | ..... ; -------------------------------------- ; | indirizzo corrente (SOLO da Subs) ; -------------------------------------- EX2: EX (SP),HL ; scambio parametro-indirizzo di ritorno ; STACK dopo lo scambio ; -------------------------------------- ; | ultimo parametro digitato ; -------------------------------------- ; | ..... ; -------------------------------------- ; | indirizzo corrente (SOLO da Subs) ; -------------------------------------- PUSH HL ; ripristino indirizzo di ritorno ; STACK dopo il ripristino ; -------------------------------------- ; | indirizzo di ritorno (da EXPR o EXF) ; -------------------------------------- ; | ultimo parametro digitato ; -------------------------------------- ; | ..... ; -------------------------------------- ; | indirizzo corrente (SOLO da Subs) ; -------------------------------------- LD A,B CALL P2C ; verifica se spazio, virgola o invio JR NC,EX3 DEC C JR NZ,LER RET EX3: JR NZ,LER DEC C JR NZ,EXPR2 RET LER: CALL MEMSZ2 LD SP,HL LD C,"*" ; "*" č messaggio errore CALL CO ; scrive a video carattere in C JP START MEMSZ2: LD HL,0ECFFH L0033: DEC H LD A,(HL) CPL LD (HL),A CP (HL) CPL LD (HL),A JR NZ,L0033 PUSH BC LD BC,0FFE6H ADD HL,BC POP BC RET msg_ST: db "DISASSEMBLER AG 3 " msg_OK: db "OK" reg_1: db "BC", "DE", "HL", "SP" reg_2: db "BC", "DE", "HL", "*", "A" reg_3: db "HL", "IX", "IY" VIRGO: LD C,"," JP CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) ; stampa stringa puntata da HL e lunga B su video o stampante PRTBHL: LD C,(HL) INC HL CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) DJNZ PRTBHL RET ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CRTLPT: LD A,(LIST) OR A CALL NZ,LPTOUT JP CO ; scrive a video il carattere in C ; stampa carattere su stampante LPTOUT: IN A,(LPT) BIT 0,A JR NZ,LPTOUT LD A,C SET 7,A OUT (LPT),A RES 7,A OUT (LPT),A SET 7,A OUT (LPT),A RET ; punto ingresso BEGIN: LD A,0C3H LD (0066H),A LD HL,RESET LD (0067H),HL ; cancella schermo LD H,0ECH LD (PUNT),HL LD BC,03FFH ; basterebbe anche 1FFH LD DE,0EC01H LD (HL),SPACE LDIR ; ricerca ram per stack LD HL,0ECFFH L0039: DEC H LD A,(HL) CPL LD (HL),A CP (HL) CPL LD (HL),A JR NZ,L0039 INC HL LD SP,HL ; scrive messaggio iniziale e attende immissione caratteri dopo prompt LD HL,msg_ST LD B,12H ; 18 caratteri da scrivere MAIN: LD DE,0000H ; E=0 -> scrive a video, D=0 -> registro HL (non IX o IY) LD (LIST),DE CALL PRTBHL ; invia stringa puntata da HL a video (LIST = 0) ; inizio interazione con l'utente START: CALL SNDCR ; invia CR LD C,']' ; "]" prompt CALL CO ; scrive a video carattere in C ; lettura comando da tastiera LD C,02H ; numero parametri da ricevere da tastiera ; inizio comando disassembler CALL EXPR2 ; legge da tastiera, scrive a video e ritorna con i parametri nello stack CP SPACE JR NZ,L0041 CALL SNDCR ; se digitato "spazio" invia CR LD (LIST),A ; scrive valore diverso da 0 (0Dh = CR) per uscita su stampante L0041: POP BC POP HL L0052: PUSH HL SCF SBC HL,BC JR C,L0042 POP HL LD HL,msg_OK ; "OK" LD B,02H ; 2 caratteri da scrivere JR MAIN ; scrive "OK" e torna a ciclo immissione da tastiera L0042: PUSH BC LD A,(LIST) OR A JR NZ,L0044 IN A,(KEYBRD) CP 93H ; Control-S per pausa scorrimento JR NZ,L0044 L0045: IN A,(KEYBRD) BIT 7,A JR NZ,L0045 CALL CI ; legge tastiera per uscita da pausa (il carattere letto č ignorato) L0044: POP BC POP HL PUSH BC CALL LADR CALL SNDSPC POP BC XOR A LD (IX_IY),A L0076: LD DE,tabella L0128: PUSH BC L0087: EX DE,HL L0049: LD B,(HL) LD A,(DE) AND B INC HL CP (HL) INC HL JR Z,L0048 LD BC,0004H ADD HL,BC JR L0049 L0048: PUSH BC LD B,(HL) CALL L0050 INC HL LD C,(HL) INC HL CALL L0051 LD B,(HL) INC HL LD C,(HL) EX DE,HL PUSH BC RET L0051: LD A,(BC) RES 7,A PUSH BC LD C,A CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) POP BC LD A,(BC) INC BC BIT 7,A JR Z,L0051 RET L0053: POP BC L0063: CALL SNDCR POP BC INC HL JR L0052 L0069: INC HL LD A,(HL) CALL LBYTE JR L0053 L0055: LD A,B CPL LD B,A AND (HL) L0054: SRL B RET C SRL A JR L0054 REG2: CALL L0055 L0071: CP 06H JR Z,L0056 L0115: LD DE,reg_2 ; base per stringhe "BC", "DE", "HL", "*", "A" ADD A,E LD E,A LD A,(DE) LD C,A CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) RET L0056: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL HLIXIY JR NZ,L0058 LD C,'+' ; 2BH CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) INC HL LD A,(HL) CALL LBYTE L0058: LD C,')' ; 29H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) RET HLIXIY: EX DE,HL LD HL,reg_3 ; base per stringhe "HL", "IX" e "IY" LD A,(IX_IY) CP 0DDH ; opcode per registro IX JR Z,L0059 CP 0FDH ; opcode per registro IY JR Z,L0060 JR L0061 L0060: INC HL INC HL L0059: INC HL INC HL L0061: PUSH BC LD B,02H PUSH AF CALL PRTBHL ; invia stringa puntata da HL a video (LIST = 0) POP AF POP BC EX DE,HL RET T0001: POP BC CALL REG2 L0068: JR L0063 T0018: POP BC CALL L0064 JR L0063 REG1: CALL L0055 L0080: CP 02H JR Z,HLIXIY L0072: EX DE,HL LD HL,reg_1 ; base per stringhe registri "BC", "DE", "HL", "SP" ADD A,A ADD A,L LD L,A JR L0061 T0002: POP BC CALL REG1 CALL VIRGO CALL ARG1 L0070: JR L0068 ARG1: INC HL LD E,(HL) INC HL LD D,(HL) EX DE,HL CALL LADR EX DE,HL RET T0003: POP BC PUSH BC CALL REG2 CALL VIRGO JP L0069 L0073: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL ARG1 LD C,')' ; 29H JP CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) L0086: CALL ARG1 POP BC JR L0070 T0004: POP BC LD C,(HL) PUSH BC LD A,07H OR B LD B,A CALL REG2 CALL VIRGO POP BC LD A,0F8H OR B CPL LD B,A AND C CALL L0054 CALL L0071 JR L0070 L0113: CALL HLIXIY CALL VIRGO T0010: POP BC CALL REG1 JR L0070 T0005: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) LD A,03H CALL L0072 LD C,')' ; 29H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) L0111: CALL VIRGO CALL HLIXIY L0074: JP L0053 T0006: CALL HLIXIY L0075: CALL VIRGO CALL L0073 JR L0074 T0007: LD C,'A' ; 41H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) JR L0075 T0008: CALL L0073 L0078: CALL VIRGO LD C,'A' ; 41H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) JR L0074 T0009: CALL L0073 CALL VIRGO CALL HLIXIY L0083: JR L0074 T0011: LD A,(HL) LD (IX_IY),A POP BC POP BC INC HL JP L0076 L0077: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL REG1 LD C,')' ; 29H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) RET T0012: LD C,'A' ; 41H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL VIRGO POP BC CALL L0077 L0081: JP L0063 T0013: POP BC PUSH BC CALL L0077 JR L0078 T0014: POP BC CALL L0055 CP 03H JR Z,L0079 CALL L0080 JR L0081 L0079: EX DE,HL LD HL,reg_afaf CALL L0061 JR L0081 L0082: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) INC HL LD A,(HL) CALL LBYTE LD C,')' ; 29H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) RET T0015: LD C,'A' ; 41H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL VIRGO CALL L0082 JR L0083 T0016: CALL L0082 JR L0078 L0064: CALL L0055 LD D,A LD BC,reg_nu AND A JR Z,L0084 L0085: LD A,(BC) INC BC BIT 7,A JR Z,L0085 DEC D JR NZ,L0085 L0084: CALL L0051 RET T0017: POP BC PUSH BC CALL L0064 CALL VIRGO JP L0086 T0024: POP BC INC HL LD DE,tabella2 JP L0087 ; ------> Tabella dei codici mnemonici ; in caso di modifiche al codice, l'inizio di questa tabella deve trovarsi necessariamente ad una locazione il cui byte meno significativo sia 00 mnemo: db "ADC AÂŽ" db "ADC " db "ADD AÂŽ" db "ADD " db "AND " db "BIT " db "CALL " db "CCā†" db "CP " db "CPā„" db "CPDā’" db "CPā‰" db "CPIā’" db "CPāŒ" db "DAā" db "DEC " db "Dā‰" db "DJNZ " db "Eā‰" db "EX " db "EX " reg_afaf: db "AF,AF§" db "EX DE,HāŒ" db "EXā˜" db "HALā”" db "IM " db "IN " db "INC " db "INā„" db "INDā’" db "INā‰" db "INIā’" db "JP " db "JR " db "LD " db "LDā„" db "LDDā’" db "LDā‰" db "LDIā’" db "NEā‡" db "NOā" db "OR " db "OTDā’" db "OTIā’" db "OUT " db "OUTā„" db "OUTā‰" db "POP " db "PUSH " db "RES " db "RET " db "RETā‰" db "RETāŽ" db "RL " db "RLā" db "RLC " db "RLCā" db "RLā„" db "RR " db "RRā" db "RRC " db "RRCā" db "RRā„" db "RST " db "SBC AÂŽ" db "SBC " db "SCā†" db "SET " db "SLA " db "SRA " db "SRL " db "SUB " db "XOR" db 0A0h, 80h, 0AAh reg_nu: db 4Eh, 0DAh, 0DAh, 4Eh, 0C3h, 0C3h, 50h, 0CFh, 50h, 0C5h, 0D0h, 0CDh, 00h L0109: INC HL LD A,(HL) CALL LBYTE CALL SNDSPC LD C,'_' ; 5FH, visualizzato come freccia a sinistra CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) PUSH HL LD A,(HL) INC HL LD C,A LD B,00H CP 80H JR C,L0108 LD B,0FFH L0108: ADD HL,BC CALL LADR POP HL L0110: JP L0053 NOP T0019: POP BC PUSH BC CALL L0064 CALL VIRGO JR L0109 T0020: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL HLIXIY LD C,')' ; 29H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) JR L0110 T0021: LD A,03H CALL L0072 JP L0111 T0022: POP BC CALL L0055 ADD A,A ADD A,A ADD A,A CALL LBYTE JP L0063 T0023: POP BC POP BC LD DE,tabella3 INC HL JP L0112 NOP NOP NOP NOP NOP T0025: XOR A LD (IX_IY),A JP L0113 T0026: LD C,'2' ; 32H JR L0114 T0027: POP BC PUSH BC CALL L0055 ADD A,'0' ; 30H LD C,A L0114: CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) JR L0110 L0116: LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) LD C,'C' ; 43H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) LD C,')' ; 29H JP CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) T0028: POP BC CALL L0055 CALL L0115 CALL VIRGO CALL L0116 L0119: JP L0063 T0029: LD DE,4149H ; A , I JR L0117 T0030: LD DE,4152H ; A , R L0117: POP BC CALL L0055 CP 01H JR Z,L0118 LD C,D LD D,E LD E,C L0118: LD C,D CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL VIRGO LD C,E CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) JR L0119 L0050: BIT 2,B PUSH AF BIT 3,B PUSH AF LD A,03H AND B INC A LD B,A PUSH DE L0120: LD A,(DE) CALL LBYTE INC DE DJNZ L0120 POP DE POP AF JR NZ,L0121 LD A,(PUNT) AND 1FH SUB 0FH CPL LD B,A L0122: CALL SNDSPC DJNZ L0122 L0121: db opcode(ld b,N) ; inizio tabella mnemonici!!! manenere byte meno significativo a 00 db hi(mnemo) POP AF JR Z,L0123 INC B L0123: RET T0031: POP BC PUSH BC CALL REG1 JP L0075 T0032: CALL L0073 DEC HL DEC HL CALL VIRGO POP BC CALL REG1 INC HL INC HL JR L0119 T0033: CALL L0116 CALL VIRGO POP BC CALL REG2 L0126: JR L0119 NOP L0125: LD A,07H OR B LD B,A CALL L0055 ADD A,'0' ; 30H LD C,A CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) RET T0034: LD A,(IX_IY) AND A JR NZ,L0124 POP BC PUSH BC CALL L0125 CALL VIRGO POP BC LD A,38H OR B LD B,A L0129: CALL REG2 JR L0126 INC HL ; ?????? refuso? L0124: POP BC PUSH BC CALL L0125 CALL VIRGO POP BC LD A,38H OR B LD B,A L0130: CALL L0055 CP 06H JP NZ,LER LD C,'(' ; 28H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) CALL HLIXIY LD C,'+' ; 2BH CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) DEC HL LD A,(HL) INC HL CALL LBYTE LD C,')' ; 29H CALL CRTLPT ; dirige carattere da stampare a video (LIST a 0) o a stampante (LIST diverso da 0) JR L0126 L0112: LD A,(IX_IY) AND A JR Z,L0127 PUSH BC LD A,(HL) CALL LBYTE INC HL POP BC L0127: JP L0128 T0035: LD A,(IX_IY) POP BC AND A JR Z,L0129 JR L0130 NOP NOP NOP NOP NOP NOP NOP NOP NOP ; tabella per decodifica opcodes ; gli ultimi due bytes di ogni gruppo di sei costituiscono l'indirizzo di salto tabella: db 0FFh db 03Fh db 000h db 021h .byte hi(L0053) .byte lo(L0053) db 0FFh db 02Fh db 000h db 035h .byte hi(L0053) .byte lo(L0053) db 0FFh db 027h db 000h db 038h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0F3h db 000h db 03Fh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0FBh db 000h db 046h .byte hi(L0053) .byte lo(L0053) db 0FFh db 008h db 000h db 04Bh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0EBh db 000h db 054h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0D9h db 000h db 05Ch .byte hi(L0053) .byte lo(L0053) db 0FFh db 076h db 000h db 05Fh .byte hi(L0053) .byte lo(L0053) db 0FFh db 000h db 000h db 095h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0C9h db 000h db 0BCh .byte hi(L0053) .byte lo(L0053) db 0FFh db 017h db 000h db 0CBh .byte hi(L0053) .byte lo(L0053) db 0FFh db 007h db 000h db 0d2h .byte hi(L0053) .byte lo(L0053) db 0FFh db 01Fh db 000h db 0dch .byte hi(L0053) .byte lo(L0053) db 0FFh db 00Fh db 000h db 0E3h .byte hi(L0053) .byte lo(L0053) db 0FFh db 037h db 000h db 0F8h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0CEh db 001h db 000h .byte hi(L0069) .byte lo(L0069) db 0FFh db 0C6h db 001h db 00Ah .byte hi(L0069) .byte lo(L0069) db 0FFh db 0E6h db 001h db 014h .byte hi(L0069) .byte lo(L0069) db 0FFh db 0FEh db 001h db 024h .byte hi(L0069) .byte lo(L0069) db 0FFh db 0F6h db 001h db 098h .byte hi(L0069) .byte lo(L0069) db 0FFh db 0DEh db 001h db 0EEh .byte hi(L0069) .byte lo(L0069) db 0FFh db 0D6h db 005h db 00Bh .byte hi(L0069) .byte lo(L0069) db 0FFh db 0EEh db 005h db 00Fh .byte hi(L0069) .byte lo(L0069) db 0F8h db 088h db 000h db 000h .byte hi(T0001) .byte lo(T0001) db 0F8h db 080h db 000h db 00Ah .byte hi(T0001) .byte lo(T0001) db 0F8h db 0A0h db 000h db 014h .byte hi(T0001) .byte lo(T0001) db 0F8h db 0B8h db 000h db 024h .byte hi(T0001) .byte lo(T0001) db 0C7h db 005h db 000h db 03Bh .byte hi(T0001) .byte lo(T0001) db 0C7h db 004h db 000h db 069h .byte hi(T0001) .byte lo(T0001) db 0F8h db 0B0h db 000h db 098h .byte hi(T0001) .byte lo(T0001) db 0F8h db 098h db 000h db 0EEh .byte hi(T0001) .byte lo(T0001) db 0F8h db 090h db 004h db 00Bh .byte hi(T0001) .byte lo(T0001) db 0F8h db 0A8h db 004h db 00Fh .byte hi(T0001) .byte lo(T0001) db 0DFh db 0DDh db 00Ch db 013h .byte hi(T0011) .byte lo(T0011) db 0CFh db 001h db 002h db 081h .byte hi(T0002) .byte lo(T0002) db 0C7h db 006h db 001h DB 081h .byte hi(T0003) .byte lo(T0003) db 0FFh db 0C3h db 002h db 07Bh .byte hi(L0086) .byte lo(L0086) db 0FFh db 0CDh db 002h db 01Ch .byte hi(L0086) .byte lo(L0086) db 0C0h db 040h db 000h db 081h .byte hi(T0004) .byte lo(T0004) db 0CFh db 009h db 000h db 010h .byte hi(L0113) .byte lo(L0113) db 0FFh db 0E3h db 000h db 048h .byte hi(T0005) .byte lo(T0005) db 0FFh db 02Ah db 002h db 081h .byte hi(T0006) .byte lo(T0006) db 0FFh db 03Ah db 002h db 081h .byte hi(T0007) .byte lo(T0007) db 0FFh db 032h db 002h db 081h .byte hi(T0008) .byte lo(T0008) db 0FFh db 022h db 002h db 081h .byte hi(T0009) .byte lo(T0009) db 0CFh db 00Bh db 000h db 03Bh .byte hi(T0010) .byte lo(T0010) db 0CFh db 003h db 000h db 069h .byte hi(T0010) .byte lo(T0010) db 0EFh db 00Ah db 000h db 081h .byte hi(T0012) .byte lo(T0012) db 0EFh db 002h db 000h db 081h .byte hi(T0013) .byte lo(T0013) db 0CFh db 0C1h db 000h db 0AFh .byte hi(T0014) .byte lo(T0014) db 0CFh db 0C5h db 000h db 0B3h .byte hi(T0014) .byte lo(T0014) db 0FFh db 0DBh db 001h db 066h .byte hi(T0015) .byte lo(T0015) db 0FFh db 0D3h db 001h db 0A3h .byte hi(T0016) .byte lo(T0016) db 0C7h db 0C4h db 002h db 01Ch .byte hi(T0017) .byte lo(T0017) db 0C7h db 0C2h db 002h db 07bh .byte hi(T0017) .byte lo(T0017) db 0C7h db 0C0h db 000h db 0BCh .byte hi(T0018) .byte lo(T0018) db 0FFh db 018h db 001h db 07Eh .byte hi(L0109) .byte lo(L0109) db 0E7h db 020h db 001h db 07Eh .byte hi(T0019) .byte lo(T0019) db 0FFh db 010h db 001h db 041h .byte hi(L0109) .byte lo(L0109) db 0FFh db 0E9h db 000h db 07Bh .byte hi(T0020) .byte lo(T0020) db 0FFh db 0F9h db 000h db 081h .byte hi(T0021) .byte lo(T0021) db 0C7h db 0C7h db 000h db 0eah .byte hi(T0022) .byte lo(T0022) db 0FFh db 0CBh db 00Ch db 013h .byte hi(T0023) .byte lo(T0023) db 0FFh db 0EDh db 00Ch db 013h .byte hi(T0024) .byte lo(T0024) db 000h db 000h db 040h db 014h .byte hi(L0053) .byte lo(L0053) NOP NOP NOP NOP tabella2: db 0CFh db 04Ah db 000h db 006h .byte hi(T0025) .byte lo(T0025) db 0FFh db 0A9h db 000h db 027h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0B9h db 000h db 02Ah .byte hi(L0053) .byte lo(L0053) db 0FFh db 0A1h db 000h db 02Eh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0B1h db 000h db 031h .byte hi(L0053) .byte lo(L0053) db 0FFh db 05Eh db 000h db 063h .byte hi(T0026) .byte lo(T0026) db 0EFh db 046h db 000h db 063h .byte hi(T0027) .byte lo(T0027) db 0FFh db 0AAh db 000h db 06Dh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0BAh db 000h db 070h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0A2h db 000h db 074h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0B2h db 000h db 077h .byte hi(L0053) .byte lo(L0053) db 0C7h db 040h db 000h db 066h .byte hi(T0028) .byte lo(T0028) db 0EFh db 047h db 000h db 081h .byte hi(T0029) .byte lo(T0029) db 0EFh db 04Fh db 000h db 081h .byte hi(T0030) .byte lo(T0030) db 0FFh db 0A8h db 000h db 084h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0B8h db 000h db 087h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0A0h db 000h db 08Bh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0B0h db 000h db 08Eh .byte hi(L0053) .byte lo(L0053) db 0FFh db 044h db 000h db 092h .byte hi(L0053) .byte lo(L0053) db 0CFh db 04Bh db 002h db 081h .byte hi(T0031) .byte lo(T0031) db 0CFh db 043h db 002h db 081h .byte hi(T0032) .byte lo(T0032) db 0C7h db 041h db 000h db 0A3h .byte hi(T0033) .byte lo(T0033) db 0FFh db 0ABh db 000h db 0A7h .byte hi(L0053) .byte lo(L0053) db 0FFh db 0BBh db 000h db 09Bh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0A3h db 000h db 0ABh .byte hi(L0053) .byte lo(L0053) db 0FFh db 0B3h db 000h db 09Fh .byte hi(L0053) .byte lo(L0053) db 0FFh db 04Dh db 000h db 0C0h .byte hi(L0053) .byte lo(L0053) db 0FFh db 045h db 000h db 0c4h .byte hi(L0053) .byte lo(L0053) db 0FFh db 067h db 000h db 0E7h .byte hi(L0053) .byte lo(L0053) db 0FFh db 06Fh db 000h db 0D6h .byte hi(L0053) .byte lo(L0053) db 0CFh db 042h db 000h db 0F4h .byte hi(L0113) .byte lo(L0113) db 000h db 000h db 004h db 013h .byte hi(LER) .byte lo(LER) tabella3: db 0C0h db 040h db 000h db 018h .byte hi(T0034) .byte lo(T0034) db 0C0h db 080h db 000h db 0B8h .byte hi(T0034) .byte lo(T0034) db 0C0h db 0C0h db 000h db 0FBh .byte hi(T0034) .byte lo(T0034) db 0F8h db 010h db 000h db 0C8h .byte hi(T0035) .byte lo(T0035) db 0F8h db 000h db 000h db 0CEh .byte hi(T0035) .byte lo(T0035) db 0F8h db 018h db 000h db 0D9h .byte hi(T0035) .byte lo(T0035) db 0F8h db 008h db 000h db 0DFh .byte hi(T0035) .byte lo(T0035) db 0F8h db 020h db 000h db 0FFh .byte hi(T0035) .byte lo(T0035) db 0F8h db 028h db 004h db 003h .byte hi(T0035) .byte lo(T0035) db 0F8h db 038h db 004h db 007h .byte hi(T0035) .byte lo(T0035) db 000h db 000h db 004h db 013h .byte hi(LER) .byte lo(LER) db 000h db 000h db 004h db 013h .byte hi(L0053) .byte lo(L0053) db 000h db 000h db 004h db 013h .byte hi(L0053) .byte lo(L0053) db 000h db 000h db 000h db 000h db 000h db 000h